import cn.hutool.core.util.RandomUtil;
import com.github.javafaker.Faker;

import java.io.Serializable;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

/**
 * 顾客们
 *
 * @author <achao1441470436@gmail.com>
 * @since 2021/11/4 0004 23:46
 */
public class Customers implements Iterator<Order>, Serializable {
    private static final long serialVersionUID = 6202217638794440645L;

    /**
     * 商品清单
     */
    private static final List<Goods> GOODS_LIST = Arrays.asList(
            Goods.builder().name("卡布奇诺").goodsType(GoodsTypeEnum.COFFEE).money(35.0).build()
            , Goods.builder().name("卡布奇诺中杯").goodsType(GoodsTypeEnum.COFFEE).money(37.0).build()
            , Goods.builder().name("卡布奇诺大杯").goodsType(GoodsTypeEnum.COFFEE).money(39.0).build()
            , Goods.builder().name("拿铁").goodsType(GoodsTypeEnum.COFFEE).money(30.0).build()
            , Goods.builder().name("美式").goodsType(GoodsTypeEnum.COFFEE).money(28.0).build()
            , Goods.builder().name("星冰乐").goodsType(GoodsTypeEnum.COFFEE).money(30.0).build()
            , Goods.builder().name("焦糖玛奇朵").goodsType(GoodsTypeEnum.COFFEE).money(32.0).build()
            , Goods.builder().name("华夫饼").goodsType(GoodsTypeEnum.DESSERT).money(19.5).build()
            , Goods.builder().name("草莓蛋糕").goodsType(GoodsTypeEnum.DESSERT).money(35.5).build()
            , Goods.builder().name("菠萝包").goodsType(GoodsTypeEnum.DESSERT).money(16.5).build()
            , Goods.builder().name("法可颂").goodsType(GoodsTypeEnum.DESSERT).money(8.5).build()
            , Goods.builder().name("意面").goodsType(GoodsTypeEnum.MEAL).money(30.0).build()
            , Goods.builder().name("意面").goodsType(GoodsTypeEnum.MEAL).money(30.0).build()
            , Goods.builder().name("水果蔬菜沙拉").goodsType(GoodsTypeEnum.MEAL).money(40.0).build()
            , Goods.builder().name("鸡肉卷").goodsType(GoodsTypeEnum.MEAL).money(35.0).build()
            , Goods.builder().name("牛肉卷").goodsType(GoodsTypeEnum.MEAL).money(35.0).build()
            , Goods.builder().name("羊肉卷").goodsType(GoodsTypeEnum.MEAL).money(35.0).build()
            , Goods.builder().name("鱼肉卷").goodsType(GoodsTypeEnum.MEAL).money(35.0).build()
    );

    /**
     * 无限商品
     *
     * @return 模拟用户下单
     */
    public static Iterator<Order> unbounded() {
        return new Customers();
    }

    @Override
    public boolean hasNext() {
        return true;
    }

    @Override
    public Order next() {
        // 模拟用户点单
        return Order.builder().username(Faker.instance().name().firstName()).id(RandomUtil.randomLong(0, Long.MAX_VALUE)).goods(RandomUtil.randomEles(GOODS_LIST, RandomUtil.randomInt(1, 10))).createTime(RandomUtil.randomDay(-7, 0)).build();
    }


}
